Description: fix closed pipe handling
Author: Sascha Steinbiss <satta@debian.org>
Bug: https://github.com/jeffkaufman/icdiff/issues/156
Forwarded: https://github.com/jeffkaufman/icdiff/pull/165
Last-Update: 2019-09-25
--- a/icdiff
+++ b/icdiff
@@ -594,7 +594,22 @@
     validate_has_two_arguments(parser, args)
     if not options.cols:
         set_cols_option(options)
-    diff(options, *args)
+    try:
+        diff(options, *args)
+    except KeyboardInterrupt:
+        pass
+    except IOError as e:
+        if e.errno == errno.EPIPE:
+            pass
+        else:
+            raise
+
+    # Close stderr to prevent printing errors when icdiff is piped to
+    # something that closes before icdiff is done writing
+    #
+    # See: https://stackoverflow.com/questions/26692284/...
+    #      ...how-to-prevent-brokenpipeerror-when-doing-a-flush-in-python
+    sys.stderr.close()
 
 
 def codec_print(s, options):
@@ -755,18 +770,4 @@
 
 
 if __name__ == "__main__":
-    try:
-        start()
-    except KeyboardInterrupt:
-        pass
-    except IOError as e:
-        if e.errno == errno.EPIPE:
-            pass
-        else:
-            raise
-    # Close stderr to prevent printing errors when icdiff is piped to
-    # something that closes before icdiff is done writing
-    #
-    # See: https://stackoverflow.com/questions/26692284/
-    #              how-to-prevent-brokenpipeerror-when-doing-a-flush-in-python
-    sys.stderr.close()
+    start()
